import { request } from './config.js';

/**
 * 获取可用票数
 * @param {string} date - 日期 (YYYY-MM-DD)
 * @returns {Promise<number>} 可用票数
 */
export function getAvailableTickets(date) {
    return request({
        url: `/reservation/available-tickets/${date}`,
        method: 'GET'
    });
}

/**
 * 获取可预约时间段
 * @param {string} date - 日期 (YYYY-MM-DD)
 * @returns {Promise<Array<string>>} 时间段列表
 */
export function getTimeSlots(date) {
    return request({
        url: `/reservation/time-slots/${date}`,
        method: 'GET'
    });
}

/**
 * 获取一段时间内每天的票数可用情况
 * @param {string} startDate - 开始日期 (YYYY-MM-DD)
 * @param {string} endDate - 结束日期 (YYYY-MM-DD)
 * @returns {Promise<Object>} 每天的票数情况 {日期: 可用票数}
 */
export function getTicketAvailability(startDate, endDate) {
    return request({
        url: `/reservation/ticket-availability?startDate=${startDate}&endDate=${endDate}`,
        method: 'GET'
    });
}

/**
 * 提交预约
 * @param {Object} data 预约信息
 * @returns {Promise} 返回预约结果
 */
export function submitReservation(data) {
    return request({
        url: '/reservation/submit',
        method: 'POST',
        data
    });
}

/**
 * 获取用户的预约列表
 * @param {number} userId - 用户ID
 * @returns {Promise} 预约列表
 */
export function getMyReservations(userId) {
    return request({
        url: `/reservation/my?userId=${userId}`,
        method: 'GET'
    });
}

/**
 * 取消预约
 * @param {number} id - 预约ID
 * @returns {Promise} 操作结果
 */
export function cancelReservation(id) {
    return request({
        url: `/reservation/cancel/${id}`,
        method: 'POST'
    });
}

/**
 * 获取预约详情，包括观众信息
 * @param {number} id - 预约ID
 * @returns {Promise<Object>} 预约详情
 */
export function getReservationDetail(id) {
    return request({
        url: `/reservation/detail/${id}`,
        method: 'GET'
    });
}

/**
 * 创建预约
 * @param {Object} data 预约数据
 */
export function createReservation(data) {
    return request({
        url: '/reservation/create',
        method: 'POST',
        data
    });
}

/**
 * 获取指定日期范围内的票务可用情况
 * @param {String} startDate 开始日期
 * @param {String} endDate 结束日期
 * @returns {Promise} 返回票务可用情况
 */
export const getDateRangeAvailability = (startDate, endDate) => {
    return request({
        url: '/reservation/availability',
        method: 'GET',
        data: { startDate, endDate }
    });
};

/**
 * 获取单个预约详情
 * @param {string} id 预约ID
 */
export function getReservationById(id) {
    return request({
        url: `/reservation/detail/${id}`,
        method: 'GET'
    });
}

/**
 * 更新预约信息
 * @param {Object} data 预约数据
 */
export function updateReservation(data) {
    return request({
        url: '/reservation/update',
        method: 'PUT',
        data
    });
}

/**
 * 获取预约关联的观众信息
 * @param {number} reservationId - 预约ID
 * @returns {Promise<Array<Object>>} 观众信息列表
 */
export function getReservationVisitors(reservationId) {
    return request({
        url: `/reservation/visitors/${reservationId}`,
        method: 'GET'
    });
}

/**
 * 更新预约观众信息
 * @param {number} reservationId - 预约ID
 * @param {Array<number>} visitorIds - 观众ID数组
 * @returns {Promise<Object>} 更新结果
 */
export function updateReservationVisitors(reservationId, visitorIds) {
    return request({
        url: `/reservation/update-visitors`,
        method: 'PUT',
        data: {
            reservationId,
            visitorIds
        }
    });
} 

/**
 * 获取票务可用性信息，包括未来30天的可用日期和票数
 * @returns {Promise<Object>} 可用性信息 { maxDailyReservation, availableDates }
 */
export function getTicketAvailabilityInfo() {
    return request({
        url: '/reservation/ticket-availability',
        method: 'GET'
    });
} 

/**
 * 删除预约记录
 * @param {number} id - 预约ID
 * @returns {Promise} 操作结果
 */
export function deleteReservation(id) {
    return request({
        url: `/reservation/delete/${id}`,
        method: 'DELETE'
    });
} 

/**
 * 获取预约的观众详细信息
 * @param {number} id - 预约ID
 * @returns {Promise<Array>} 观众详细信息列表
 */
export function getReservationVisitorsDetail(id) {
    return request({
        url: `/reservation/visitors-detail/${id}`,
        method: 'GET'
    });
} 